import api from "../util/api";

export default {
  namespace: "list",
  // 组件的状态
  state: {
    list: []
  },
  // 操作状态的方法
  reducers: {
    // preState 是之前的 state
    // 返回值是新的 state
    addItem: (preState) => ({
      list: [...preState.list, preState.list.length + 1]
    }),
    // 初始化时调用
    // type 是 reducers 名 list/setState
    // data 是调用时传入的参数
    setState: (preState, {type, data}) => data
  },
  effects: {
    *init(params, sagaEffects) {
      // 获取 call, put 方法
      const { call, put } = sagaEffects;

      // 执行异步的网络请求, 相当于 let result = await api("/api/list");
      let result = yield call(api, "/api/list");

      // 调用 reducers 中的 setState
      yield put({
        type: "setState",
        data: {
          list: result
        }
      });
    }
  }
}